/**
 * 平台适配工具
 * 用于处理不同平台（H5、App、小程序）的兼容性问题
 */

// 获取当前平台
export const getPlatform = () => {
  // #ifdef H5
  return 'H5'
  // #endif
  
  // #ifdef APP-PLUS
  return 'APP-PLUS'
  // #endif
  
  // #ifdef MP-WEIXIN
  return 'MP-WEIXIN'
  // #endif
  
  // #ifdef MP-ALIPAY
  return 'MP-ALIPAY'
  // #endif
  
  // #ifdef MP-BAIDU
  return 'MP-BAIDU'
  // #endif
  
  // #ifdef MP-TOUTIAO
  return 'MP-TOUTIAO'
  // #endif
  
  // #ifdef MP-QQ
  return 'MP-QQ'
  // #endif
  
  return 'UNKNOWN'
}

// 判断是否为小程序平台
export const isMiniProgram = () => {
  const platform = getPlatform()
  return platform.startsWith('MP-')
}

// 判断是否为H5平台
export const isH5 = () => {
  return getPlatform() === 'H5'
}

// 判断是否为App平台
export const isApp = () => {
  return getPlatform() === 'APP-PLUS'
}

// 获取CSS变量值（兼容不同平台）
export const getCSSVariable = (variableName, defaultValue = '') => {
  // #ifdef H5 || APP-PLUS
  try {
    const value = getComputedStyle(document.documentElement).getPropertyValue(variableName)
    return value ? value.trim() : defaultValue
  } catch (error) {
    console.warn('获取CSS变量失败:', error)
    return defaultValue
  }
  // #endif
  
  // #ifdef MP-WEIXIN || MP-ALIPAY || MP-BAIDU || MP-TOUTIAO || MP-QQ
  // 小程序环境下无法直接获取CSS变量，返回默认值
  return defaultValue
  // #endif
}

// 获取系统信息
export const getSystemInfo = () => {
  try {
    return uni.getSystemInfoSync()
  } catch (error) {
    console.warn('获取系统信息失败:', error)
    return {}
  }
}

// 获取状态栏高度
export const getStatusBarHeight = () => {
  const systemInfo = getSystemInfo()
  return systemInfo.statusBarHeight || 0
}

// 获取导航栏高度（小程序）
export const getNavBarHeight = () => {
  // #ifdef MP-WEIXIN || MP-ALIPAY || MP-BAIDU || MP-TOUTIAO || MP-QQ
  try {
    const menuButtonInfo = uni.getMenuButtonBoundingClientRect()
    const systemInfo = getSystemInfo()
    return menuButtonInfo.height + (menuButtonInfo.top - systemInfo.statusBarHeight) * 2
  } catch (error) {
    console.warn('获取导航栏高度失败:', error)
    return 44
  }
  // #endif
  
  // #ifndef MP-WEIXIN || MP-ALIPAY || MP-BAIDU || MP-TOUTIAO || MP-QQ
  return 44
  // #endif
}

// 获取安全区域高度
export const getSafeAreaBottom = () => {
  const systemInfo = getSystemInfo()
  // #ifdef APP-PLUS
  return systemInfo.safeAreaInsets?.bottom || 0
  // #endif
  
  // #ifndef APP-PLUS
  return 0
  // #endif
}

// 平台特定的样式类名
export const getPlatformClass = () => {
  // #ifdef H5 || APP-PLUS
  return 'header-class-app'
  // #endif
  
  // #ifdef MP-WEIXIN
  return 'header-class-wechat'
  // #endif
  
  return 'header-class'
}

// 图片错误处理（小程序兼容）
export const handleImageError = (imageUrl, fallbackUrl) => {
  // #ifdef MP-WEIXIN || MP-ALIPAY || MP-BAIDU || MP-TOUTIAO || MP-QQ
  // 小程序环境下，如果图片加载失败，直接返回备用图片
  return fallbackUrl
  // #endif
  
  // #ifndef MP-WEIXIN || MP-ALIPAY || MP-BAIDU || MP-TOUTIAO || MP-QQ
  // H5和App环境下可以尝试检测图片是否可访问
  return new Promise((resolve) => {
    const img = new Image()
    img.onload = () => resolve(imageUrl)
    img.onerror = () => resolve(fallbackUrl)
    img.src = imageUrl
  })
  // #endif
}

// 防抖函数（小程序兼容）
export const debounce = (func, wait) => {
  let timeout
  return function executedFunction(...args) {
    const later = () => {
      clearTimeout(timeout)
      func(...args)
    }
    clearTimeout(timeout)
    timeout = setTimeout(later, wait)
  }
}

// 节流函数（小程序兼容）
export const throttle = (func, limit) => {
  let inThrottle
  return function executedFunction(...args) {
    if (!inThrottle) {
      func.apply(this, args)
      inThrottle = true
      setTimeout(() => inThrottle = false, limit)
    }
  }
} 